package com.neusoft.tijian.mapper;

import com.neusoft.tijian.dto.OrdersQueryDto;
import com.neusoft.tijian.po.Orders;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface OrdersMapper {



    // 分页查询订单（关联用户、套餐、医院）
    List<Orders> listOrders(@Param("query") OrdersQueryDto query, @Param("start") Integer start);

    // 查询订单总条数
    Integer countOrders(OrdersQueryDto query);

    // 根据ID查询订单详情
    Orders getOrdersById(Integer orderId);

    // 更新订单状态（1未归档 → 2已归档）
    Integer updateOrdersState(@Param("orderId") Integer orderId, @Param("state") Integer state);

    // 新增订单（可选，用于用户预约）
    Integer saveOrders(Orders orders);

    // -------------------------- 新增用户端方法 --------------------------
    /**
     * 1. 按 userId 查询用户的所有预约（分页）
     * @param userId 用户ID（前端sessionStorage中的userId）
     * @param start 分页起始位置
     * @param pageSize 每页条数
     * @return 预约列表（关联套餐、医院信息）
     */
    List<Orders> listUserOrders(
            @Param("userId") String userId,
            @Param("start") Integer start,
            @Param("pageSize") Integer pageSize
    );

    /**
     * 2. 按 userId 查询预约总条数（用于分页）
     * @param userId 用户ID
     * @return 总预约数
     */
    Integer countUserOrders(@Param("userId") String userId);

    /**
     * 3. 取消预约（更新state为3，与医生端状态区分：1=未归档/2=已归档/3=已取消）
     * @param orderId 预约ID
     * @return 影响行数（1=成功，0=失败）
     */
    Integer cancelUserOrder(@Param("orderId") Integer orderId);
}